﻿using System;
using System.ComponentModel;
using System.Runtime.InteropServices;

namespace Teigha.Core
{
	public class OdGeCurve3d : OdGeEntity3d
	{
		[EditorBrowsable(EditorBrowsableState.Never)]
		public OdGeCurve3d(IntPtr cPtr, bool cMemoryOwn) : base(GlobalsPINVOKE.OdGeCurve3d_SWIGUpcast(cPtr), cMemoryOwn)
		{
			this.swigCPtr = new HandleRef(this, cPtr);
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public static HandleRef getCPtr(OdGeCurve3d obj)
		{
			if (obj != null)
			{
				return obj.swigCPtr;
			}
			return new HandleRef(null, IntPtr.Zero);
		}

		~OdGeCurve3d()
		{
			this.Dispose();
		}

		public override void Dispose()
		{
			if (this.swigCPtr.Handle != IntPtr.Zero)
			{
				if (this.swigCMemOwn)
				{
					lock (this.locker)
					{
						if (this.swigCPtr.Handle != IntPtr.Zero && this.swigCMemOwn)
						{
							this.swigCMemOwn = false;
							GlobalsPINVOKE.delete_OdGeCurve3d(this.swigCPtr);
						}
					}
					this.swigCMemOwn = false;
				}
				this.swigCPtr = new HandleRef(null, IntPtr.Zero);
			}
			GC.SuppressFinalize(this);
			base.Dispose();
		}

		public void getInterval(OdGeInterval interval)
		{
			GlobalsPINVOKE.OdGeCurve3d_getInterval__SWIG_0(this.swigCPtr, OdGeInterval.getCPtr(interval));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void getInterval(OdGeInterval interval, OdGePoint3d start, OdGePoint3d end)
		{
			GlobalsPINVOKE.OdGeCurve3d_getInterval__SWIG_1(this.swigCPtr, OdGeInterval.getCPtr(interval), OdGePoint3d.getCPtr(start), OdGePoint3d.getCPtr(end));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeCurve3d reverseParam()
		{
			OdGeCurve3d result = new OdGeCurve3d(GlobalsPINVOKE.OdGeCurve3d_reverseParam(this.swigCPtr), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeCurve3d setInterval()
		{
			OdGeCurve3d result = new OdGeCurve3d(GlobalsPINVOKE.OdGeCurve3d_setInterval__SWIG_0(this.swigCPtr), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool setInterval(OdGeInterval interval)
		{
			bool result = GlobalsPINVOKE.OdGeCurve3d_setInterval__SWIG_1(this.swigCPtr, OdGeInterval.getCPtr(interval));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public double distanceTo(OdGePoint3d point, OdGeTol tol)
		{
			double result = GlobalsPINVOKE.OdGeCurve3d_distanceTo__SWIG_0(this.swigCPtr, OdGePoint3d.getCPtr(point), OdGeTol.getCPtr(tol));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public double distanceTo(OdGePoint3d point)
		{
			double result = GlobalsPINVOKE.OdGeCurve3d_distanceTo__SWIG_1(this.swigCPtr, OdGePoint3d.getCPtr(point));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public double distanceTo(OdGeCurve3d curve, OdGeTol tol)
		{
			double result = GlobalsPINVOKE.OdGeCurve3d_distanceTo__SWIG_2(this.swigCPtr, OdGeCurve3d.getCPtr(curve), OdGeTol.getCPtr(tol));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public double distanceTo(OdGeCurve3d curve)
		{
			double result = GlobalsPINVOKE.OdGeCurve3d_distanceTo__SWIG_3(this.swigCPtr, OdGeCurve3d.getCPtr(curve));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGePoint3d closestPointTo(OdGePoint3d point, OdGeTol tol)
		{
			OdGePoint3d result = new OdGePoint3d(GlobalsPINVOKE.OdGeCurve3d_closestPointTo__SWIG_0(this.swigCPtr, OdGePoint3d.getCPtr(point), OdGeTol.getCPtr(tol)), true);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGePoint3d closestPointTo(OdGePoint3d point)
		{
			OdGePoint3d result = new OdGePoint3d(GlobalsPINVOKE.OdGeCurve3d_closestPointTo__SWIG_1(this.swigCPtr, OdGePoint3d.getCPtr(point)), true);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGePoint3d closestPointTo(OdGeCurve3d curve, OdGePoint3d pntOnOtherCrv, OdGeTol tol)
		{
			OdGePoint3d result = new OdGePoint3d(GlobalsPINVOKE.OdGeCurve3d_closestPointTo__SWIG_2(this.swigCPtr, OdGeCurve3d.getCPtr(curve), OdGePoint3d.getCPtr(pntOnOtherCrv), OdGeTol.getCPtr(tol)), true);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGePoint3d closestPointTo(OdGeCurve3d curve, OdGePoint3d pntOnOtherCrv)
		{
			OdGePoint3d result = new OdGePoint3d(GlobalsPINVOKE.OdGeCurve3d_closestPointTo__SWIG_3(this.swigCPtr, OdGeCurve3d.getCPtr(curve), OdGePoint3d.getCPtr(pntOnOtherCrv)), true);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void getClosestPointTo(OdGePoint3d point, OdGePointOnCurve3d pntOnCrv, OdGeTol tol)
		{
			GlobalsPINVOKE.OdGeCurve3d_getClosestPointTo__SWIG_0(this.swigCPtr, OdGePoint3d.getCPtr(point), OdGePointOnCurve3d.getCPtr(pntOnCrv), OdGeTol.getCPtr(tol));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void getClosestPointTo(OdGePoint3d point, OdGePointOnCurve3d pntOnCrv)
		{
			GlobalsPINVOKE.OdGeCurve3d_getClosestPointTo__SWIG_1(this.swigCPtr, OdGePoint3d.getCPtr(point), OdGePointOnCurve3d.getCPtr(pntOnCrv));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void getClosestPointTo(OdGeCurve3d curve, OdGePointOnCurve3d pntOnThisCrv, OdGePointOnCurve3d pntOnOtherCrv, OdGeTol tol)
		{
			GlobalsPINVOKE.OdGeCurve3d_getClosestPointTo__SWIG_2(this.swigCPtr, OdGeCurve3d.getCPtr(curve), OdGePointOnCurve3d.getCPtr(pntOnThisCrv), OdGePointOnCurve3d.getCPtr(pntOnOtherCrv), OdGeTol.getCPtr(tol));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void getClosestPointTo(OdGeCurve3d curve, OdGePointOnCurve3d pntOnThisCrv, OdGePointOnCurve3d pntOnOtherCrv)
		{
			GlobalsPINVOKE.OdGeCurve3d_getClosestPointTo__SWIG_3(this.swigCPtr, OdGeCurve3d.getCPtr(curve), OdGePointOnCurve3d.getCPtr(pntOnThisCrv), OdGePointOnCurve3d.getCPtr(pntOnOtherCrv));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGePoint3d projClosestPointTo(OdGePoint3d point, OdGeVector3d projectDirection, OdGeTol tol)
		{
			OdGePoint3d result = new OdGePoint3d(GlobalsPINVOKE.OdGeCurve3d_projClosestPointTo__SWIG_0(this.swigCPtr, OdGePoint3d.getCPtr(point), OdGeVector3d.getCPtr(projectDirection), OdGeTol.getCPtr(tol)), true);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGePoint3d projClosestPointTo(OdGePoint3d point, OdGeVector3d projectDirection)
		{
			OdGePoint3d result = new OdGePoint3d(GlobalsPINVOKE.OdGeCurve3d_projClosestPointTo__SWIG_1(this.swigCPtr, OdGePoint3d.getCPtr(point), OdGeVector3d.getCPtr(projectDirection)), true);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGePoint3d projClosestPointTo(OdGeCurve3d curve, OdGeVector3d projectDirection, OdGePoint3d pntOnOtherCrv, OdGeTol tol)
		{
			OdGePoint3d result = new OdGePoint3d(GlobalsPINVOKE.OdGeCurve3d_projClosestPointTo__SWIG_2(this.swigCPtr, OdGeCurve3d.getCPtr(curve), OdGeVector3d.getCPtr(projectDirection), OdGePoint3d.getCPtr(pntOnOtherCrv), OdGeTol.getCPtr(tol)), true);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGePoint3d projClosestPointTo(OdGeCurve3d curve, OdGeVector3d projectDirection, OdGePoint3d pntOnOtherCrv)
		{
			OdGePoint3d result = new OdGePoint3d(GlobalsPINVOKE.OdGeCurve3d_projClosestPointTo__SWIG_3(this.swigCPtr, OdGeCurve3d.getCPtr(curve), OdGeVector3d.getCPtr(projectDirection), OdGePoint3d.getCPtr(pntOnOtherCrv)), true);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void getProjClosestPointTo(OdGePoint3d point, OdGeVector3d projectDirection, OdGePointOnCurve3d pntOnCrv, OdGeTol tol)
		{
			GlobalsPINVOKE.OdGeCurve3d_getProjClosestPointTo__SWIG_0(this.swigCPtr, OdGePoint3d.getCPtr(point), OdGeVector3d.getCPtr(projectDirection), OdGePointOnCurve3d.getCPtr(pntOnCrv), OdGeTol.getCPtr(tol));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void getProjClosestPointTo(OdGePoint3d point, OdGeVector3d projectDirection, OdGePointOnCurve3d pntOnCrv)
		{
			GlobalsPINVOKE.OdGeCurve3d_getProjClosestPointTo__SWIG_1(this.swigCPtr, OdGePoint3d.getCPtr(point), OdGeVector3d.getCPtr(projectDirection), OdGePointOnCurve3d.getCPtr(pntOnCrv));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void getProjClosestPointTo(OdGeCurve3d curve, OdGeVector3d projectDirection, OdGePointOnCurve3d pntOnThisCrv, OdGePointOnCurve3d pntOnOtherCrv, OdGeTol tol)
		{
			GlobalsPINVOKE.OdGeCurve3d_getProjClosestPointTo__SWIG_2(this.swigCPtr, OdGeCurve3d.getCPtr(curve), OdGeVector3d.getCPtr(projectDirection), OdGePointOnCurve3d.getCPtr(pntOnThisCrv), OdGePointOnCurve3d.getCPtr(pntOnOtherCrv), OdGeTol.getCPtr(tol));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void getProjClosestPointTo(OdGeCurve3d curve, OdGeVector3d projectDirection, OdGePointOnCurve3d pntOnThisCrv, OdGePointOnCurve3d pntOnOtherCrv)
		{
			GlobalsPINVOKE.OdGeCurve3d_getProjClosestPointTo__SWIG_3(this.swigCPtr, OdGeCurve3d.getCPtr(curve), OdGeVector3d.getCPtr(projectDirection), OdGePointOnCurve3d.getCPtr(pntOnThisCrv), OdGePointOnCurve3d.getCPtr(pntOnOtherCrv));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public bool getNormalPoint(OdGePoint3d point, OdGePointOnCurve3d pntOnCrv, OdGeTol tol)
		{
			bool result = GlobalsPINVOKE.OdGeCurve3d_getNormalPoint__SWIG_0(this.swigCPtr, OdGePoint3d.getCPtr(point), OdGePointOnCurve3d.getCPtr(pntOnCrv), OdGeTol.getCPtr(tol));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool getNormalPoint(OdGePoint3d point, OdGePointOnCurve3d pntOnCrv)
		{
			bool result = GlobalsPINVOKE.OdGeCurve3d_getNormalPoint__SWIG_1(this.swigCPtr, OdGePoint3d.getCPtr(point), OdGePointOnCurve3d.getCPtr(pntOnCrv));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeBoundBlock3d boundBlock()
		{
			OdGeBoundBlock3d result = new OdGeBoundBlock3d(GlobalsPINVOKE.OdGeCurve3d_boundBlock__SWIG_0(this.swigCPtr), true);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeBoundBlock3d boundBlock(OdGeInterval range)
		{
			OdGeBoundBlock3d result = new OdGeBoundBlock3d(GlobalsPINVOKE.OdGeCurve3d_boundBlock__SWIG_1(this.swigCPtr, OdGeInterval.getCPtr(range)), true);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeBoundBlock3d orthoBoundBlock()
		{
			OdGeBoundBlock3d result = new OdGeBoundBlock3d(GlobalsPINVOKE.OdGeCurve3d_orthoBoundBlock__SWIG_0(this.swigCPtr), true);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeBoundBlock3d orthoBoundBlock(OdGeInterval range)
		{
			OdGeBoundBlock3d result = new OdGeBoundBlock3d(GlobalsPINVOKE.OdGeCurve3d_orthoBoundBlock__SWIG_1(this.swigCPtr, OdGeInterval.getCPtr(range)), true);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeEntity3d project(OdGePlane projectionPlane, OdGeVector3d projectDirection, OdGeTol tol)
		{
			IntPtr intPtr = GlobalsPINVOKE.OdGeCurve3d_project__SWIG_0(this.swigCPtr, OdGePlane.getCPtr(projectionPlane), OdGeVector3d.getCPtr(projectDirection), OdGeTol.getCPtr(tol));
			OdGeEntity3d result = (intPtr == IntPtr.Zero) ? null : new OdGeEntity3d(intPtr, false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeEntity3d project(OdGePlane projectionPlane, OdGeVector3d projectDirection)
		{
			IntPtr intPtr = GlobalsPINVOKE.OdGeCurve3d_project__SWIG_1(this.swigCPtr, OdGePlane.getCPtr(projectionPlane), OdGeVector3d.getCPtr(projectDirection));
			OdGeEntity3d result = (intPtr == IntPtr.Zero) ? null : new OdGeEntity3d(intPtr, false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeEntity3d orthoProject(OdGePlane projectionPlane, OdGeTol tol)
		{
			IntPtr intPtr = GlobalsPINVOKE.OdGeCurve3d_orthoProject__SWIG_0(this.swigCPtr, OdGePlane.getCPtr(projectionPlane), OdGeTol.getCPtr(tol));
			OdGeEntity3d result = (intPtr == IntPtr.Zero) ? null : new OdGeEntity3d(intPtr, false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeEntity3d orthoProject(OdGePlane projectionPlane)
		{
			IntPtr intPtr = GlobalsPINVOKE.OdGeCurve3d_orthoProject__SWIG_1(this.swigCPtr, OdGePlane.getCPtr(projectionPlane));
			OdGeEntity3d result = (intPtr == IntPtr.Zero) ? null : new OdGeEntity3d(intPtr, false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool isOn(OdGePoint3d point, out double param, OdGeTol tol)
		{
			bool result = GlobalsPINVOKE.OdGeCurve3d_isOn__SWIG_0(this.swigCPtr, OdGePoint3d.getCPtr(point), out param, OdGeTol.getCPtr(tol));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool isOn(OdGePoint3d point, out double param)
		{
			bool result = GlobalsPINVOKE.OdGeCurve3d_isOn__SWIG_1(this.swigCPtr, OdGePoint3d.getCPtr(point), out param);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool isOn(double param, OdGeTol tol)
		{
			bool result = GlobalsPINVOKE.OdGeCurve3d_isOn__SWIG_2(this.swigCPtr, param, OdGeTol.getCPtr(tol));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool isOn(double param)
		{
			bool result = GlobalsPINVOKE.OdGeCurve3d_isOn__SWIG_3(this.swigCPtr, param);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public double paramOf(OdGePoint3d point, OdGeTol tol)
		{
			double result = GlobalsPINVOKE.OdGeCurve3d_paramOf__SWIG_0(this.swigCPtr, OdGePoint3d.getCPtr(point), OdGeTol.getCPtr(tol));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public double paramOf(OdGePoint3d point)
		{
			double result = GlobalsPINVOKE.OdGeCurve3d_paramOf__SWIG_1(this.swigCPtr, OdGePoint3d.getCPtr(point));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void getTrimmedOffset(double distance, OdGeVector3d planeNormal, OdGeCurve3dPtrArray offsetCurveList, OdGe.OffsetCrvExtType extensionType, OdGeTol tol)
		{
			GlobalsPINVOKE.OdGeCurve3d_getTrimmedOffset__SWIG_0(this.swigCPtr, distance, OdGeVector3d.getCPtr(planeNormal), OdGeCurve3dPtrArray.getCPtr(offsetCurveList), (int)extensionType, OdGeTol.getCPtr(tol));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void getTrimmedOffset(double distance, OdGeVector3d planeNormal, OdGeCurve3dPtrArray offsetCurveList, OdGe.OffsetCrvExtType extensionType)
		{
			GlobalsPINVOKE.OdGeCurve3d_getTrimmedOffset__SWIG_1(this.swigCPtr, distance, OdGeVector3d.getCPtr(planeNormal), OdGeCurve3dPtrArray.getCPtr(offsetCurveList), (int)extensionType);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void getTrimmedOffset(double distance, OdGeVector3d planeNormal, OdGeCurve3dPtrArray offsetCurveList)
		{
			GlobalsPINVOKE.OdGeCurve3d_getTrimmedOffset__SWIG_2(this.swigCPtr, distance, OdGeVector3d.getCPtr(planeNormal), OdGeCurve3dPtrArray.getCPtr(offsetCurveList));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public bool isClosed(OdGeTol tol)
		{
			bool result = GlobalsPINVOKE.OdGeCurve3d_isClosed__SWIG_0(this.swigCPtr, OdGeTol.getCPtr(tol));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool isClosed()
		{
			bool result = GlobalsPINVOKE.OdGeCurve3d_isClosed__SWIG_1(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool isPlanar(OdGePlane plane, OdGeTol tol)
		{
			bool result = GlobalsPINVOKE.OdGeCurve3d_isPlanar__SWIG_0(this.swigCPtr, OdGePlane.getCPtr(plane), OdGeTol.getCPtr(tol));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool isPlanar(OdGePlane plane)
		{
			bool result = GlobalsPINVOKE.OdGeCurve3d_isPlanar__SWIG_1(this.swigCPtr, OdGePlane.getCPtr(plane));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool isLinear(OdGeLine3d line, OdGeTol tol)
		{
			bool result = GlobalsPINVOKE.OdGeCurve3d_isLinear__SWIG_0(this.swigCPtr, OdGeLine3d.getCPtr(line), OdGeTol.getCPtr(tol));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool isLinear(OdGeLine3d line)
		{
			bool result = GlobalsPINVOKE.OdGeCurve3d_isLinear__SWIG_1(this.swigCPtr, OdGeLine3d.getCPtr(line));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool isCoplanarWith(OdGeCurve3d curve, OdGePlane plane, OdGeTol tol)
		{
			bool result = GlobalsPINVOKE.OdGeCurve3d_isCoplanarWith__SWIG_0(this.swigCPtr, OdGeCurve3d.getCPtr(curve), OdGePlane.getCPtr(plane), OdGeTol.getCPtr(tol));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool isCoplanarWith(OdGeCurve3d curve, OdGePlane plane)
		{
			bool result = GlobalsPINVOKE.OdGeCurve3d_isCoplanarWith__SWIG_1(this.swigCPtr, OdGeCurve3d.getCPtr(curve), OdGePlane.getCPtr(plane));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool isPeriodic(out double period)
		{
			bool result = GlobalsPINVOKE.OdGeCurve3d_isPeriodic(this.swigCPtr, out period);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public double length(double fromParam, double toParam, double tol)
		{
			double result = GlobalsPINVOKE.OdGeCurve3d_length__SWIG_0(this.swigCPtr, fromParam, toParam, tol);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public double length(double tol)
		{
			double result = GlobalsPINVOKE.OdGeCurve3d_length__SWIG_1(this.swigCPtr, tol);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public double paramAtLength(double datumParam, double length, bool posParamDir, double tol)
		{
			double result = GlobalsPINVOKE.OdGeCurve3d_paramAtLength(this.swigCPtr, datumParam, length, posParamDir, tol);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool area(double startParam, double endParam, out double value, OdGeTol tol)
		{
			bool result = GlobalsPINVOKE.OdGeCurve3d_area__SWIG_0(this.swigCPtr, startParam, endParam, out value, OdGeTol.getCPtr(tol));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool area(double startParam, double endParam, out double value)
		{
			bool result = GlobalsPINVOKE.OdGeCurve3d_area__SWIG_1(this.swigCPtr, startParam, endParam, out value);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void getSplitCurves(double param, OdGeCurve3d piece1, OdGeCurve3d piece2)
		{
			GlobalsPINVOKE.OdGeCurve3d_getSplitCurves(this.swigCPtr, param, piece1, piece2);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public bool explode(OdGeCurve3dPtrArray explodedCurves, OdIntArray newExplodedCurves, OdGeInterval pInterval)
		{
			bool result = GlobalsPINVOKE.OdGeCurve3d_explode__SWIG_0(this.swigCPtr, OdGeCurve3dPtrArray.getCPtr(explodedCurves), OdIntArray.getCPtr(newExplodedCurves).Handle, OdGeInterval.getCPtr(pInterval));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool explode(OdGeCurve3dPtrArray explodedCurves, OdIntArray newExplodedCurves)
		{
			bool result = GlobalsPINVOKE.OdGeCurve3d_explode__SWIG_1(this.swigCPtr, OdGeCurve3dPtrArray.getCPtr(explodedCurves), OdIntArray.getCPtr(newExplodedCurves).Handle);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void getLocalClosestPoints(OdGePoint3d point, OdGePointOnCurve3d approxPntOnThisCrv, OdGeInterval pInterval1, OdGeTol tol)
		{
			GlobalsPINVOKE.OdGeCurve3d_getLocalClosestPoints__SWIG_0(this.swigCPtr, OdGePoint3d.getCPtr(point), OdGePointOnCurve3d.getCPtr(approxPntOnThisCrv), OdGeInterval.getCPtr(pInterval1), OdGeTol.getCPtr(tol));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void getLocalClosestPoints(OdGePoint3d point, OdGePointOnCurve3d approxPntOnThisCrv, OdGeInterval pInterval1)
		{
			GlobalsPINVOKE.OdGeCurve3d_getLocalClosestPoints__SWIG_1(this.swigCPtr, OdGePoint3d.getCPtr(point), OdGePointOnCurve3d.getCPtr(approxPntOnThisCrv), OdGeInterval.getCPtr(pInterval1));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void getLocalClosestPoints(OdGePoint3d point, OdGePointOnCurve3d approxPntOnThisCrv)
		{
			GlobalsPINVOKE.OdGeCurve3d_getLocalClosestPoints__SWIG_2(this.swigCPtr, OdGePoint3d.getCPtr(point), OdGePointOnCurve3d.getCPtr(approxPntOnThisCrv));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void getLocalClosestPoints(OdGeCurve3d curve, OdGePointOnCurve3d approxPntOnThisCrv, OdGePointOnCurve3d approxPntOnOtherCrv, OdGeInterval pInterval1, OdGeInterval pInterval2, OdGeTol tol)
		{
			GlobalsPINVOKE.OdGeCurve3d_getLocalClosestPoints__SWIG_3(this.swigCPtr, OdGeCurve3d.getCPtr(curve), OdGePointOnCurve3d.getCPtr(approxPntOnThisCrv), OdGePointOnCurve3d.getCPtr(approxPntOnOtherCrv), OdGeInterval.getCPtr(pInterval1), OdGeInterval.getCPtr(pInterval2), OdGeTol.getCPtr(tol));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void getLocalClosestPoints(OdGeCurve3d curve, OdGePointOnCurve3d approxPntOnThisCrv, OdGePointOnCurve3d approxPntOnOtherCrv, OdGeInterval pInterval1, OdGeInterval pInterval2)
		{
			GlobalsPINVOKE.OdGeCurve3d_getLocalClosestPoints__SWIG_4(this.swigCPtr, OdGeCurve3d.getCPtr(curve), OdGePointOnCurve3d.getCPtr(approxPntOnThisCrv), OdGePointOnCurve3d.getCPtr(approxPntOnOtherCrv), OdGeInterval.getCPtr(pInterval1), OdGeInterval.getCPtr(pInterval2));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void getLocalClosestPoints(OdGeCurve3d curve, OdGePointOnCurve3d approxPntOnThisCrv, OdGePointOnCurve3d approxPntOnOtherCrv, OdGeInterval pInterval1)
		{
			GlobalsPINVOKE.OdGeCurve3d_getLocalClosestPoints__SWIG_5(this.swigCPtr, OdGeCurve3d.getCPtr(curve), OdGePointOnCurve3d.getCPtr(approxPntOnThisCrv), OdGePointOnCurve3d.getCPtr(approxPntOnOtherCrv), OdGeInterval.getCPtr(pInterval1));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void getLocalClosestPoints(OdGeCurve3d curve, OdGePointOnCurve3d approxPntOnThisCrv, OdGePointOnCurve3d approxPntOnOtherCrv)
		{
			GlobalsPINVOKE.OdGeCurve3d_getLocalClosestPoints__SWIG_6(this.swigCPtr, OdGeCurve3d.getCPtr(curve), OdGePointOnCurve3d.getCPtr(approxPntOnThisCrv), OdGePointOnCurve3d.getCPtr(approxPntOnOtherCrv));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public bool hasStartPoint(OdGePoint3d startPoint)
		{
			bool result = GlobalsPINVOKE.OdGeCurve3d_hasStartPoint(this.swigCPtr, OdGePoint3d.getCPtr(startPoint));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool hasEndPoint(OdGePoint3d endPoint)
		{
			bool result = GlobalsPINVOKE.OdGeCurve3d_hasEndPoint(this.swigCPtr, OdGePoint3d.getCPtr(endPoint));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGePoint3d evalPoint(double param)
		{
			OdGePoint3d result = new OdGePoint3d(GlobalsPINVOKE.OdGeCurve3d_evalPoint__SWIG_0(this.swigCPtr, param), true);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGePoint3d evalPoint(double param, int numDeriv, OdGeVector3dArray derivatives)
		{
			OdGePoint3d result = new OdGePoint3d(GlobalsPINVOKE.OdGeCurve3d_evalPoint__SWIG_1(this.swigCPtr, param, numDeriv, OdGeVector3dArray.getCPtr(derivatives)), true);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void getSamplePoints(double fromParam, double toParam, double approxEps, OdGePoint3dArray pointArray, OdGeDoubleArray paramArray, bool forceResampling)
		{
			GlobalsPINVOKE.OdGeCurve3d_getSamplePoints__SWIG_0(this.swigCPtr, fromParam, toParam, approxEps, OdGePoint3dArray.getCPtr(pointArray), OdGeDoubleArray.getCPtr(paramArray), forceResampling);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void getSamplePoints(double fromParam, double toParam, double approxEps, OdGePoint3dArray pointArray, OdGeDoubleArray paramArray)
		{
			GlobalsPINVOKE.OdGeCurve3d_getSamplePoints__SWIG_1(this.swigCPtr, fromParam, toParam, approxEps, OdGePoint3dArray.getCPtr(pointArray), OdGeDoubleArray.getCPtr(paramArray));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void getSamplePoints(int numSample, OdGePoint3dArray pointArray)
		{
			GlobalsPINVOKE.OdGeCurve3d_getSamplePoints__SWIG_2(this.swigCPtr, numSample, OdGePoint3dArray.getCPtr(pointArray));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void getSamplePoints(int numSample, OdGePoint3dArray pointArray, OdGeDoubleArray paramArray)
		{
			GlobalsPINVOKE.OdGeCurve3d_getSamplePoints__SWIG_3(this.swigCPtr, numSample, OdGePoint3dArray.getCPtr(pointArray), OdGeDoubleArray.getCPtr(paramArray));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeCurve3d Assign(OdGeCurve3d curve)
		{
			OdGeCurve3d result = new OdGeCurve3d(GlobalsPINVOKE.OdGeCurve3d_Assign(this.swigCPtr, OdGeCurve3d.getCPtr(curve)), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void getSamplePoints(double fromParam, double toParam, double approxEps, OdGePoint3dArray pointArray)
		{
			GlobalsPINVOKE.OdGeCurve3d_getSamplePoints__SWIG_5(this.swigCPtr, fromParam, toParam, approxEps, OdGePoint3dArray.getCPtr(pointArray));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void getSamplePoints(OdGeInterval paramInterval, double approxEps, OdGePoint3dArray pointArray, OdGeDoubleArray pParamArray)
		{
			GlobalsPINVOKE.OdGeCurve3d_getSamplePoints__SWIG_6(this.swigCPtr, OdGeInterval.getCPtr(paramInterval), approxEps, OdGePoint3dArray.getCPtr(pointArray), OdGeDoubleArray.getCPtr(pParamArray).Handle);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void getSamplePoints(OdGeInterval paramInterval, double approxEps, OdGePoint3dArray pointArray)
		{
			GlobalsPINVOKE.OdGeCurve3d_getSamplePoints__SWIG_7(this.swigCPtr, OdGeInterval.getCPtr(paramInterval), approxEps, OdGePoint3dArray.getCPtr(pointArray));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void appendSamplePoints(double fromParam, double toParam, double approxEps, OdGePoint3dArray pointArray, OdGeDoubleArray pParamArray)
		{
			GlobalsPINVOKE.OdGeCurve3d_appendSamplePoints__SWIG_0(this.swigCPtr, fromParam, toParam, approxEps, OdGePoint3dArray.getCPtr(pointArray), OdGeDoubleArray.getCPtr(pParamArray).Handle);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void appendSamplePoints(double fromParam, double toParam, double approxEps, OdGePoint3dArray pointArray)
		{
			GlobalsPINVOKE.OdGeCurve3d_appendSamplePoints__SWIG_1(this.swigCPtr, fromParam, toParam, approxEps, OdGePoint3dArray.getCPtr(pointArray));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void appendSamplePoints(int numSample, OdGePoint3dArray pointArray, OdGeDoubleArray pParamArray)
		{
			GlobalsPINVOKE.OdGeCurve3d_appendSamplePoints__SWIG_2(this.swigCPtr, numSample, OdGePoint3dArray.getCPtr(pointArray), OdGeDoubleArray.getCPtr(pParamArray).Handle);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void appendSamplePoints(int numSample, OdGePoint3dArray pointArray)
		{
			GlobalsPINVOKE.OdGeCurve3d_appendSamplePoints__SWIG_3(this.swigCPtr, numSample, OdGePoint3dArray.getCPtr(pointArray));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void appendSamplePoints(OdGeInterval paramInterval, double approxEps, OdGePoint3dArray pointArray, OdGeDoubleArray pParamArray)
		{
			GlobalsPINVOKE.OdGeCurve3d_appendSamplePoints__SWIG_4(this.swigCPtr, OdGeInterval.getCPtr(paramInterval), approxEps, OdGePoint3dArray.getCPtr(pointArray), OdGeDoubleArray.getCPtr(pParamArray).Handle);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void appendSamplePoints(OdGeInterval paramInterval, double approxEps, OdGePoint3dArray pointArray)
		{
			GlobalsPINVOKE.OdGeCurve3d_appendSamplePoints__SWIG_5(this.swigCPtr, OdGeInterval.getCPtr(paramInterval), approxEps, OdGePoint3dArray.getCPtr(pointArray));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		private object locker = new object();

		private HandleRef swigCPtr;
	}
}
